package sysvalidate

import (
	"errors"
	"github.com/vueadmin/app/admin/sys"
	"github.com/vueadmin/utils/conv"
)

type FieldValidate struct{}

func (FieldValidate) Validate(data *sys.Field) (err error) {
	if conv.IsEmpty(data.Title) {
		return errors.New("字段中文名不能为空")
	}
	if conv.IsEmpty(data.Field) {
		return errors.New("字段英文名不能为空")
	}
	if conv.IsEmpty(data.Type) {
		return errors.New("字段类型不能为空")
	}

	if conv.Int(data.Type) == 1 && data.PostStatus == true && conv.IsValueInList(conv.String(data.Datatype), []string{"int", "tinyint", "smallint", "mediumint"}) {
		return errors.New("文本框不支持int类型，请使用计数器字段类型")
	}

	if conv.IsValueInList(conv.String(data.Type), []string{"2", "3", "4", "5", "6"}) {
		if conv.IsEmpty(data.Sql) && len(data.ItemConfig) == 0 {
			return errors.New("请配置选项")
		} else {
			if len(data.ItemConfig) > 0 {
				for _, val := range data.ItemConfig {
					if conv.String(val["val"]) == "" {
						return errors.New("请配置选项")
					}
				}
			}
		}
	} else if conv.Int(data.Type) == 31 {
		if data.OtherConfig["rand_length"] == nil || data.OtherConfig["rand_length"] == "" {
			return errors.New("请配置随机数长度")
		}
	}

	return
}
